package d2_Thread_api;

public class ThreadDemo01 {
    public static void main(String[] args) {
        //目标:掌握线程常用的方法
        Thread t1 = new MyThread("1号线程");
        //子线程的名字默认是-->Thread-索引
        //                  例子Thread-0、Thread-1
        //如果设置了名字就会覆盖掉,原来的名字
        //t1.setName("1号线程");//没有重写构造器之前
        t1.start();//启动线程
        System.out.println(t1.getName());//输出线程的名字

        Thread t2 = new MyThread("2号线程");//使用多态进行书写
        //t2.setName("2号线程");
        t2.start();//启动线程
        System.out.println(t2.getName());

        //这个代码是哪个线程在执行, 就会得到哪个线程对象
        Thread m = Thread.currentThread();//就是主线程在调用
        m.setName("最牛的,最六的");
        System.out.println(m.getName());//输出线程的名字
        //为什么会先打线程的名字,因为主线程跑的很快,可能子线程还没有启动就已经将其名字打出来了

        //为线程设置名字,一定要在启动之前进行设置,否则可能设置失败
        for (int i = 0; i < 4; i++) {
            System.out.println(m.getName() + "线程输出" + i);
        }
        //百度网盘就是这样子干的-->不交钱就加休眠给你
    }

}

//1、定义一个类继承Thread类,成为线程类
class MyThread extends Thread {
    public MyThread(String name) {
        super(name);//为了创建对象的时候进行线程名字的初始化
    }

    //2、重写run方法, 声明线程要干的事情
    @Override
    public void run() {
        for (int i = 0; i < 4; i++) {
            //当前线程的名字
            System.out.println(Thread.currentThread().getName() + "==> 线程输出" + i);
        }
    }
}
